#ifndef COMPLEXE_H
#define COMPLEXE_H

#include "Constante.h"
#include "NonComplexe.h"
#include "Entier.h"
#include "Reel.h"
#include "Rationnel.h"
#include "Operateur.h"
#include <iostream>
using namespace std;
class Complexe : public Constante
{
        NonComplexe* re;
		NonComplexe* im;
public:
    Complexe();
    Complexe(const Complexe&);
    Complexe(const Entier&);
    Complexe(const Rationnel&);
    Complexe(const Reel&);
    Complexe(const NonComplexe*,const NonComplexe* = new Entier(0));
    ~Complexe();


    Constante* operator+(const Constante&)const;
    Constante* operator*(const Constante&)const;
    Constante* operator-(const Constante&)const;
    Constante* operator/(const Constante&)const;
    Constante* operator-()const;

    std::string print()const {
        std::stringstream ss;
        ss <<re->print()<<" + "<< this->im->print() << "*i";
        return ss.str();
    }

    NonComplexe* getRe(){return re;}
    NonComplexe* getIm(){return im;}


};

#endif // COMPLEXE_H
